/**
 * @Copyright ®2015 Sinosoft Co. Ltd. All rights reserved.<br/>
 * 项目名称 : 中科软支付平台
 * 创建日期 : 2016年12月13日
 * 修改历史 : 
 *     1. [2016年12月13日]创建文件 by liuyujia
 */
package com.sinosoft.sinopay.web.weixinpay.biz.service;

import java.io.UnsupportedEncodingException;
import java.util.List;

import com.sinosoft.sinocloud.platform.base.SinoBaseCheckException;
import com.sinosoft.sinocloud.platform.common.exception.biz.IllegalRequestException;
import com.sinosoft.sinopay.api.common.dto.pay.PaymentInfoDetailDTO;
import com.sinosoft.sinopay.paytrade.dto.PayTradeNotifyRecordDTO;
import com.sinosoft.sinopay.paytrade.dto.PaymentTradeReqDTO;
import com.sinosoft.sinopay.web.weixinpay.dto.WechatEntryRequsetDTO;
import com.sinosoft.sinopay.web.weixinpay.dto.WechatPaymentResultDTO;

/**  
 * 【微信支付服务接口类】
 * @author liuyujia
 * @date 2016年12月13日 下午4:28:01 
 * @version V1.0  
 */
public interface PaymentWechatService {
	/**
	 * 获取支付地址
	 * @return 支付链接
	 */
	String dealWechatPayRequest(WechatEntryRequsetDTO tWechatEntryRequsetDTO);

	/**
	 * 获取授权信息
	 * @param authorizeInfo 授权需要携带的参数
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	String getAuthorizeInfo(String authorizeInfo) throws UnsupportedEncodingException;
	
	/**
	 * 根据code获取openid
	 * @param code
	 * @return openid
	 * @throws Exception
	 */
	String getOpenidByCode(String code) throws Exception;
	
	/**
	 * 生成支付签名
	 * @param merchantCode
	 * @param tWechatEntryRequsetDTO
	 * @return
	 * @throws IllegalRequestException
	 */
	String getMerchantSignValid(String merchantCode, WechatEntryRequsetDTO tWechatEntryRequsetDTO) throws IllegalRequestException;
	
	/**
	 * 根据支付号码获得订单信息
	 * @param payNo
	 * @return
	 */
	PaymentInfoDetailDTO getPaymentTradeForPayNo(String payNo);
	
	/**
	 * 微信预支付统一下单接口
	 * @param payNo
	 * @param openid
	 * @return
	 */
	WechatPaymentResultDTO wechatPrePayment(String payNo, String openid) throws SinoBaseCheckException, Exception;
	
	/**
	 * 获取商户回调地址
	 * @param merchantCode
	 * @param notifyWay
	 * @return
	 */
	String getNotifyUrlByMerchant(String merchantCode, String notifyWay) throws Exception;
	
	/**
	 * 写支付主表信息
	 * @throws Exception
	 */
	void addPaymentInfo(String payNo) throws Exception;
	
	/**
	 * 取消支付记录回调信息
	 * @param cPayTradeNotifyRecordDTO
	 * @throws Exception
	 */
	void addPayTradeNotifyRecordByChanel(PaymentInfoDetailDTO tPaymentInfoDetailDTO) throws Exception;
	
	/**
	 * 记录回调信息
	 * @throws Exception
	 */
	void addPayTradeNotifyRecord(PayTradeNotifyRecordDTO cPayTradeNotifyRecordDTO) throws Exception;
	
	/**
	 * 更新支付订单表支付信息
	 * @throws Exception
	 */
	void modifyTradeOrderStatus(String payNo, String payStatus) throws Exception;
	
	/**
	 * 更新支付主表支付信息
	 * @throws Exception
	 */
	void modifyPaymentInfo(PaymentTradeReqDTO cPaymentTradeReqDTO) throws Exception;
	
	/**
	 * 查询回调信息表
	 * @param PayNo
	 * @throws Exception
	 */
	List<PayTradeNotifyRecordDTO> queryPayTradeNotifyRecord(String payNo) throws Exception;
}
